
define([
    'Util',
    'text!tpl/sprint/editSprint.tpl',
    'select',
    'list',
    'form',
    'date',
    'jquery',
    'cookie',
    'dialog',
    'validator',
    'loading',
    '../common/getPath',
    '../common/dateFormat'
], function(Util, tpl, Select,List, Form, MyDate, $,$cookie, Dialog, Validator, Loading, AjaxPath, Format) {
    require(['style!css/style.css']);
    var select;
    //系统变量-定义该模块的根节点
    var $el = null;
    //系统变量-构造函数
    var _indexModule = null,
        list = null,
        tplId = null,
        tabParent = null,
        editSprintdata = null,
        loadingConfig=null,
        handLoading=null,
        editSprintValidator = null,
        editSubTaskMomeValidor = null,
        reqTypeSelect = null,
        sprintStatusSelect = null,
        editSprintLogTable = null,
        config = null,
        dialog = null,
        Authority = true,
        backLogReqList = null,
        cycleSelect= null,
        sprintReqList = null;
    var initialize = function(indexModule, options, tabItem) {
        $el = $(tpl);
        _indexModule = indexModule;
        //事件--点击切换tab后事件回调
        $(tabItem).on("tabActive", function() {
            tabItem.show(true); //刷新表单
        });
        //页面传递变量，勿删！
        editSprintdata = options;
        tabParent = tabItem;
        tplId = options.menuId;
        createLoading();
        /* //业务相关代码
         TabInit();*/
        //将根节点赋值给接口
        eventInit();
        this.content = $el;
        formInit();
    };

    //业务代码-事件初始化
    var eventInit = function() {
        $el.on('click', '.editSprintBtn', saveSprintEditValidation);
        $el.on('click', '.btnBack', back);
        $el.on('click', '.btnStatus a', statusChange);
        $el.on('click', '#multipleMoveOutSprint', moveOutSprint);
        $el.on('click', '.singleMoveOutSprint', moveOutSprint);
        $el.on('click', '#multipleMoveInSprint', moveInSprint);
        $el.on('click', '.singleMoveInSprint', moveInSprint);
        $el.on('click', '.btnReset', backLogReqReset);
        $el.on('click', '.btnSearch', backLogReqSearch);
        $el.on('click', '.t-list-title .tri', bindTableSwitch);
        $el.on('click', '.editSprintLogTab li', bindEditSprintLogTab);
        $el.on('click', '.editSprintAddMome', createSprintMomeDialog);

        $el.on('blur', '.cycleNum', cycleSelectChange);
    };
    var forbidEnterEdiModule = function() {
        $("input[name='moduleName']", $el).on('keypress',function(e){
            if(e.keyCode === 13){
                e.preventDefault();
                return false;
            }
        });
    }

    var back = function() {
        tabParent.switchTab(tplId);
        tabParent.destroy('editSprintTab');
    };

    var formInit = function() {
        Util.ajax.getJson(AjaxPath.project+"/sprints/"+editSprintdata.id, {}, function(result, isok) {
            if(result.returnCode === "0000"){
                editSprintdata = result.beans.sprint;

                $("input[name='sprintName']", $el).val(editSprintdata.sprintName);
                $("input[name='cycleNum']", $el).val(editSprintdata.cycleNum);
                $("input[name='endTime']", $el).val(new Date(editSprintdata.endTime).Format("yyyy-MM-dd"));
                $("textarea[name='description']", $el).val(editSprintdata.description);
                $('.btnStatus a[data="'+editSprintdata.status+'"]', $el).addClass('t-btn-blue').siblings().removeClass('t-btn-blue');

                if(editSprintdata.isDefault===1){
                    $("#multipleMoveOutSprint",$el).attr('disabled',true).css({'cursor':'default'}).removeClass('t-btn-white').addClass('t-btn-grey');
                }

                inSelect();
                initDate();
                listInit();
                backLogList(result.beans.defaultSprintId);
                seachSelect();
                LogTable();
                sprintEditValidation();
                forbidEnterEdiModule();
            }else {
                new Dialog({
                    // mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                });
            }
        });
    };

    var switchTab = function(index) {
        $(".t-tabs-items li", $el).eq(index).trigger('click');
    };

    //statusChange
    var statusChange = function () {
        $(this).toggleClass('t-btn-blue');
        $(this).siblings().removeClass('t-btn-blue');
    };
    var inSelect = function() {
        $("input[name='sprintName']", $el).val(editSprintdata.sprintName);
        $("input[name='cycleNum']", $el).val(editSprintdata.cycleNum);
        $("input[name='endTime']", $el).val(new Date(editSprintdata.endTime).Format("yyyy-MM-dd"));
        $("textarea[name='sprintDescription']", $el).val(editSprintdata.description);
        $('.btnStatus a[data="'+editSprintdata.status+'"]', $el).addClass('t-btn-blue').siblings().removeClass('t-btn-blue');
        //迭代周期s
        var cycleDateSelect = [
            {
                "key":"天",
                "value":"天"
            },
            {
                "key":"周",
                "value":"周"
            },
            {
                "key":"个月",
                "value":"个月"
            }
        ];
        cycleSelect = new Select({
            el: $("#sprintCycle", $el),       //要绑定的容器
            ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                method: 'GET'
            },
            label: '', //下拉框单元左侧label文本，可不配置
            selectText: false,       //是否显示  ‘选择|清除’  模式
            name: 'cycleDate',    //下拉框单元右侧下拉框名称
            disabled: false,     //组件是否被禁用
            topOption: "请选择", //设置最顶部option的text属性
            value: '',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
            textField: "value",   //设置下拉框内容，填写数据中对应的字段名
            valueField: "key",//设置下拉框value，填写数据中对应的字段名
            datas: cycleDateSelect,         //数据源
            loadAtClick: false,// true--第一次点击时渲染|false或不配置--初始化时渲染
            dataReady: function () {
                $('#sprintCycle li').eq(0).addClass(' disabled-result');
            }
        });
        cycleSelect.setValue('"'+editSprintdata.cycleDate+'"');
        cycleSelect.on("change",function(e,valueObj){
            cycleSelectChange(valueObj.key);
        });
    };
    var cycleSelectChange = function (type) {
        type=cycleSelect.getSelected('key');
        var timeStr=$('input[name=startTime]',$el).val();
        var startTimeVal = Date.parse(new Date(timeStr));
        var endTimeVal = null;
        if(type==='天'){
            endTimeVal = startTimeVal+86400000*$('input[name=cycleNum]',$el).val();
        }else if(type==='周'){
            endTimeVal = startTimeVal+7*86400000*$('input[name=cycleNum]',$el).val();
        }else{
            endTimeVal = new Date(startTimeVal);
            endTimeVal.setMonth( endTimeVal.getMonth()+Number($('input[name=cycleNum]',$el).val()));
        }
        $('input[name=endTime]',$el).val(new Date(endTimeVal).Format("yyyy-MM-dd"))
    };

    var initDate = function() {
        startDate = new MyDate({
            el: $("#startDate", $el),
            inputClassName: 'date',
            label: '<i style="color:red;padding:2px;">*</i>开始时间:',
            name: 'startTime',    //开始日期文本框name
            isReadOnly: true,  //项可设置日期输入框是否只读
            /*min: -365,
            max: '',//最大日期限制*/
            range: false,
            type: "date",
            isDisabled: false,//是否禁用组件
            //defaultValue: nowTime(0,'yyyy-MM-dd'),
            defaultValue: new Date(editSprintdata.startTime).Format("yyyy-MM-dd"),
            btns: ['clear', 'now', 'confirm'],
            done: function(dates,value,startDate){
                cycleSelectChange();
            }
        });
    };
    //迭代内需
    var listInit = function(){
        var data = {};
        data.systemId = $cookie.get("projectSelectId");
        var config = {
            el: $('.sprintReqListContainer', $el),
            ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                method:'GET'
            },
            field: {
                boxType: 'checkbox',
                key: 'id',
                items: [
                    {
                        text: '需求名称',
                        title: 'requireTitle',
                        name: 'requireTitle',
                        className: 'w90',
                        width:200,
                        click: function (e, val,item) {
                            createDialogViewRequirement(e, item);
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html();
                            return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none">' + val + '</a>';
                        }
                    },
                    {
                        text: '需求编号',
                        title: 'requireNum',
                        name: 'requireNum',
                        className: 'w90',
                        width:150,
                        click: function (e, val,item) {
                            createDialogViewRequirement(e, item);
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html();
                            return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none">' + val + '</a>';
                        }
                    },
                    {
                        text: '提出时间',
                        name: 'proposeTime',
                        className: 'w90',
                        width: 100,
                        render: function (item, val) {
                            if(val){
                                return new Date(val).Format("yyyy-MM-dd");
                            }
                        }
                    },
                    {
                        text: '创建时间',
                        name: 'createTime',
                        className: 'w90',
                        width: 150,
                        render: function (item, val) {
                            if(val){
                                return new Date(val).Format("yyyy-MM-dd hh:mm:ss");
                            }
                        }
                    },
                    {
                        text: '更新时间',
                        name: 'updateTime',
                        className: 'w90',
                        width: 150,
                        render: function (item, val) {
                            if(val){
                                return new Date(val).Format("yyyy-MM-dd hh:mm:ss");
                            }
                        }
                    },
                    {
                        text: '需求类型',
                        name: 'requireType',
                        className: 'w120',
                        width:90,
                    },
                    {
                        text: '状态',
                        name: 'statusName',
                        className: 'w120',
                        width:90,
                    },
                    {
                        text: '经办人',
                        name: 'tryPeopleName',
                        className: 'w120',
                        width:80,
                    },
                    {
                        text: '提出人',
                        name: 'presentPeople',
                        className: 'w120',
                        width:80,
                    },
                    {
                        text: '操作',
                        title: '',
                        name: '',
                        width:'',
                        className: 'w90',
                        click: function (e, val, item) {
                            // console.log(val,item);
                        },
                        render: function (item, val) {
                            var defaultButton = "",
                                background='#63a8eb';
                            if(editSprintdata.isDefault===1){
                                defaultButton = "disabled";
                                background="#808a94";
                            }

                            return '<button style="margin-right:2px;background: '+background+'" '+defaultButton+' class="t-btn t-btn-blue t-btn-xs singleMoveOutSprint"><a style="color:#fff">移出迭代</a></button>';
                        }
                    }]
            },
            page: {
                customPages: [2, 3, 5, 6, 10, 15, 20, 30, 50], //可选择每页显示多少条
                perPage: 5, //默认每页显示多少条记录
                total: true
            },
            data: {
                url: AjaxPath.demand + "/requires?sprintId="+editSprintdata.id+"&systemId="+$cookie.get("projectSelectId")+"&type=1&userId="+$cookie.get("userId")
                //url:"../../../data/list_notice.json"
            }
        };
        sprintReqList = new List(config);
        sprintReqList.search(data);
    };
    //移出移出迭代
    var moveOutSprint = function (e) {
        if(e.currentTarget.id!=="multipleMoveOutSprint"){
            $(".sprintReqListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td").click();

            $(".sprintReqListContainer .sn-list-show table tbody tr").eq(e.currentTarget.parentNode.parentNode.rowIndex).find('td').click();
        }
        moveSprint(e,'out');
    };

    var moveInSprint = function (e) {
        if(e.currentTarget.id!=="multipleMoveInSprint"){
            $(".BacklogListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td").click();
            $(".BacklogListContainer .sn-list-show table tbody tr").eq(e.currentTarget.parentNode.parentNode.rowIndex).find('td').click();
        }
        moveSprint(e,'in');
    }
    var moveSprint = function(e,type){
        handLoading = new Loading(loadingConfig);
        var nodes = [];
        if(type==='out'){
            nodes = sprintReqList.getCheckedRows();
        }else{
            nodes = backLogReqList.getCheckedRows();
        }
        if(nodes.length < 1) {
            handLoading.destroy();
            config = {
                mode: 'tips',
                content: '<div style="text-align:center;margin-top:70px">请选择至少一条数据进行操作！</div>',
                width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                cancelDisplay: false
            };
            dialog = new Dialog(config);
        } else {
            var data = [];
            for(var i = 0; i < nodes.length; i++) {
                data.push(nodes[i].id);
            }
            moveDialogBox(nodes, data,type);
        }
    };
    var moveDialogBox = function(nodes, data,type) {
        handLoading.destroy();
        var dialogTitle = '提示';
        var dialogContent = '确认把选择的需求移出或移入该迭代吗？';
        var urlType = '';
        var multiUrlType = '';
        var urlId = '';
        if(type==='out'){
            dialogTitle = '移出提示';
            dialogContent = '确认把选择的需求移出该迭代吗？';
            urlType='removeRequire';
            multiUrlType = 'batchRemoveRequire';
            urlId=$cookie.get("projectSelectId");
        }else{
            dialogTitle = '移入提示';
            dialogContent = '确认把选择的需求移入该迭代吗？';
            urlType='appendRequire';
            multiUrlType = 'batchAppendRequire';
            urlId=editSprintdata.id;
        }
        var config = {
            mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
            title: dialogTitle, //对话框标题
            content: '<div style="text-align:center;margin-top:50px">'+dialogContent+'</div>' /* + content.substring(0,content.length-1)*/ , //对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
            ok: function() {
                handLoading = new Loading(loadingConfig);
                moveSprintReq(nodes, data,urlType,multiUrlType,urlId);
                return true;
            }, // 配置该项时才会出现ok按钮，回调函数可为空。如果指定 return false 则执行完方法后不关闭对话框。默认 return true
            okValue: '确定', //确定按钮的文本 默认是 ‘ok’
            cancel: function() {}, //取消按钮的回调函数,配置该项时才会出现关闭按钮，回调函数可为空。
            cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
            cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
            width: 300, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
            height: 120, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
            padding: '0 16px 1em 10px', //(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
            align: 'bottom right', //设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
            skin: 'dialogSkin dialogSkin2', //设置对话框额外的className参数,多个className请使用空格隔开。
            fixed: true, //是否开启固定定位 默认false不开启|true开启
            quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
            modal: true, //是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
            beforeOpen: function() {}, //对话框打开之前执行。
            zIndex: 990 // 对话框的z-index值，默认是1024。
        };
        new Dialog(config)
    };
    var moveSprintReq = function(nodes, data,urlType,multiUrlType,urlId) {
        if(data.length===1){
            Util.ajax.getJson(AjaxPath.project +"/sprints/"+urlType+"/"+nodes[0].id+"/"+urlId+"/"+$cookie.get('userId'), {}, function(result, isok) {
                handLoading.destroy();
                if(result.returnCode==="0000"){
                    new Dialog({
                        mode: 'tips',
                        content: '<div style="text-align:center;margin-top:70px">更新成功!</div>',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false
                    });
                    sprintReqList.search();
                    backLogReqList.search();
                    editSprintLogTable.search();
                }else{
                    new Dialog({
                        mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|tips确认对话框
                        title: '提示', //对话框标题
                        width: 300,
                        height: 120,
                        modal: true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>', //对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                        cancelDisplay: false,
                        ok: function() {}, // 配置该项时才会出现ok按钮，回调函数可为空。如果指定 return false 则执行完方法后不关闭对话框。默认 return true
                        okValue: '关闭' //确定按钮的文本 默认是 ‘ok’
                    });
                }
            });
        }else{
            // data.userId=$cookie.get('userId');
            Util.ajax.postJson(AjaxPath.project +"/sprints/"+multiUrlType+"/"+urlId+"/"+$cookie.get('userId'), JSON.stringify(data), function(result, isok) {
                handLoading.destroy();
                if(result.returnCode==="0000"){
                    new Dialog({
                        mode: 'tips',
                        content: '<div style="text-align:center;margin-top:70px">批量更新成功!</div>',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false
                    });
                    sprintReqList.search();
                    backLogReqList.search();
                    editSprintLogTable.search();
                }else{
                    new Dialog({
                        mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|tips确认对话框
                        title: '提示', //对话框标题
                        width: 300,
                        height: 120,
                        modal: true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>', //对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                        cancelDisplay: false,
                        ok: function() {}, // 配置该项时才会出现ok按钮，回调函数可为空。如果指定 return false 则执行完方法后不关闭对话框。默认 return true
                        okValue: '关闭' //确定按钮的文本 默认是 ‘ok’
                    });
                }
            })
        }

    };
    //查看需求浮层
    var createDialogViewRequirement = function(e, item){
        item.menuId = tplId;
        Util.ajax.getJson(AjaxPath.demand + '/requires/'+item.data.id +'?type='+item.data.type, {}, function(result){
            if(result.returnCode==="0000"){
                var requireTitle=result.beans.requireTitle;
                require(['js/requirement/viewRequirement'], function(viewRequirement) {
                    var resultViewRequirement = new viewRequirement({}, item.data, tabParent);
                    var config = {
                        mode: 'normal', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                        title: "查看需求:"+result.beans.systemName+"/"+requireTitle, //对话框标题，
                        content: resultViewRequirement.content, //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                        cancelValue: '关闭', //取消按钮的文本 默认是 ‘关闭’
                        okValue: '修改', //取消按钮的文本 默认是 ‘关闭’//取消按钮的文本 默认是 ‘关闭’
                        cancelDisplay: false, //是否显示取消按钮 默认true显示|false不显示
                        width: 1000, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 490, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                        maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                        maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                        padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                        align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                        skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                        fixed: false, //是否开启固定定位 默认false不开启|true开启
                        quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                        modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                        backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                        backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                        beforeOpen: function() {
                            console.log('对话框打开时执行。');

                        }, //对话框打开之前执行。
                        escClose:true,//esc键快速关闭对话框，默认为true
                        zIndex:990   // 对话框的z-index值，默认是1024。
                    };
                    var dialog= new Dialog(config);
                    dialog.on('onclose',function(){
                        console.log('弹窗关闭');
                    });
                });
            }else{
                new Dialog({
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                })
            }
        });
    };
    //需求池中需求
    var backLogList = function(id){
        var data = {};
        data.systemId = $cookie.get("projectSelectId");
        var config = {
            el: $('.BacklogListContainer', $el),
            ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                method:'GET'
            },
            field: {
                boxType: 'checkbox',
                key: 'id',
                items: [
                    {
                        text: '需求名称',
                        name: 'requireTitle',
                        className: 'w90',
                        width:200,
                        click: function (e, val,item) {
                            createDialogViewRequirement(e, item);
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html();
                            return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none">' + val + '</a>';
                        }
                    },
                    {
                        text: '需求编号',
                        name: 'requireNum',
                        className: 'w90',
                        width:150,
                        click: function (e, val,item) {
                            createDialogViewRequirement(e, item);
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html();
                            return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none">' + val + '</a>';
                        }
                    },
                    {
                        text: '提出时间',
                        name: 'proposeTime',
                        className: 'w90',
                        width: 100,
                        render: function (item, val) {
                            if(val){
                                return new Date(val).Format("yyyy-MM-dd");
                            }
                        }
                    },
                    {
                        text: '创建时间',
                        name: 'createTime',
                        className: 'w90',
                        width: 150,
                        render: function (item, val) {
                            if(val){
                                return new Date(val).Format("yyyy-MM-dd hh:mm:ss");
                            }
                        }
                    },
                    {
                        text: '更新时间',
                        name: 'updateTime',
                        className: 'w90',
                        width: 150,
                        render: function (item, val) {
                            if(val){
                                return new Date(val).Format("yyyy-MM-dd hh:mm:ss");
                            }
                        }
                    },
                    {
                        text: '需求类型',
                        name: 'requireType',
                        className: 'w120',
                        width:90,
                    },
                    {
                        text: '状态',
                        name: 'statusName',
                        className: 'w120',
                        width:90,
                    },
                    {
                        text: '经办人',
                        name: 'tryPeopleName',
                        className: 'w120',
                        width:80,
                    },
                    {
                        text: '提出人',
                        name: 'presentPeople',
                        className: 'w120',
                        width:80,
                    },
                    {
                        text: '操作',
                        name: '',
                        width:'',
                        className: 'w90',
                        click: function (e, val, item) {
                            // console.log(val,item);
                        },
                        render: function (item, val) {
                            var defaultButton = "";
                            if(Authority){
                                defaultButton = '<button style="margin-right:2px;" class="t-btn t-btn-blue t-btn-xs singleMoveInSprint"><a style="color:#fff">移入迭代</a></button>';
                            }

                            return defaultButton;
                        }
                    }]
            },
            page: {
                customPages: [2, 3, 5, 6, 10, 15, 20, 30, 50], //可选择每页显示多少条
                perPage: 5, //默认每页显示多少条记录
                total: true
            },
            data: {
                url: AjaxPath.demand + "/requires?sprintId="+id+"&systemId="+$cookie.get("projectSelectId")+"&type=1&userId="+$cookie.get("userId")
                // url:"../../../data/list_notice.json"
            }
        };
        backLogReqList = new List(config);
        backLogReqList.search(data);
    };
    //搜索需求池中需求form
    var seachSelect = function() {
        //状态
        Util.ajax.getJson(AjaxPath.project+"/dropdown?modual=require&type=requireStatus&flowSwitch=true&systemId="+$cookie.get("projectSelectId"), {}, function(result, isok){
            sprintStatusSelect = new Select({
                el: $("#status", $el),       //要绑定的容器
                ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                    method: 'GET'
                },
                label:'状态:', //下拉框单元左侧label文本，可不配置
                selectText: false,       //是否显示  ‘选择|清除’  模式
                name: 'status',    //下拉框单元右侧下拉框名称
                disabled: false,     //组件是否被禁用
                topOption: "请选择", //设置最顶部option的text属性
                value: '',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                textField: "value",   //设置下拉框内容，填写数据中对应的字段名
                valueField: "key",//设置下拉框value，填写数据中对应的字段名
                datas: result.beans,         //数据源
                loadAtClick: false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                dataReady: function () {
                    console.log("状态");
                }
            });
            sprintStatusSelect.setValue(0);
        });
        //需求类型
        Util.ajax.getJson(AjaxPath.project+"/dropdown?modual=require&type=requireType", {}, function(result, isok){
            reqTypeSelect = new Select({
                el: $("#requireType", $el),       //要绑定的容器
                ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                    method: 'GET'
                },
                label:'需求类型:', //下拉框单元左侧label文本，可不配置
                selectText: false,       //是否显示  ‘选择|清除’  模式
                name: 'requireType',    //下拉框单元右侧下拉框名称
                disabled: false,     //组件是否被禁用
                topOption: "请选择", //设置最顶部option的text属性
                value: '',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                textField: "value",   //设置下拉框内容，填写数据中对应的字段名
                valueField: "key",//设置下拉框value，填写数据中对应的字段名
                datas: result.beans,         //数据源
                loadAtClick: false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                dataReady: function () {
                    console.log("requireType");
                }
            });
            reqTypeSelect.setValue(0);
        })
    };
    //backLogReqSearch
    var backLogReqSearch = function () {
        var data = Form.serialize($('.backLogReqForm'));
        backLogReqList.search(data);
    };
    //backLogReqReset
    var backLogReqReset = function () {
        $("input[name=systemName]", $el).val("");
        $("input[name=requireTitle]", $el).val("");
        $("input[name=tryPeople]", $el).val("");
        $("input[name=requireNum]", $el).val("");
        sprintStatusSelect.setValue(0);
        reqTypeSelect.setValue(0);
        backLogReqList.search();
        $(".needListContainer").find("a").removeClass("theSort");
    };
    //保存
    var sprintEditValidation = function () {
        var config = {
            el: $(".detailSprintEditForm", $el),
            submitBtn: $(".editSprintBtn"), //触发验证的按钮，可不配置
            dialog: true, //是否弹出验证结果对话框
            pattern: { intege1:"^[1-9]\\d*$" },
            rules: {
                sprintName: "required",
                cycleNum:"required|intege1",
                cycleDate:"required",
                starTime: 'required|date',
                endTime: 'required',
            },
            messages: {
                sprintName: {
                    required: "迭代名称不能为空！"
                },
                cycleNum: {
                    required: "迭代周期不能为空！",
                    intege1:"请输入正整数!"
                },
                cycleDate: {
                    required: "迭代周期不能为空！"
                },
                starTime: {
                    required: "开始时间不能为空！"
                },
                endTime: {
                    required: "结束时间不能为空！"
                }
            }
        };
        editSprintValidator = new Validator(config);
    };
    var saveSprintEditValidation = function() {
        if(editSprintValidator.form()) {
            savEditSprint();
        } else {
            console.log('验证失败');
        }
    };
    var savEditSprint = function(e) {
        var saveEditSprintDia = null;
        var handLoading = new Loading(loadingConfig);
        var editFormSprintData = Form.serialize($('.detailSprintEditForm', $el));
        editFormSprintData.status = $('.btnStatus a.t-btn-blue').attr('data');
        editFormSprintData.systemId = editSprintdata.systemId;
        editFormSprintData.updatePerson=$cookie.get("userId");
        var saveEditSprintDiaConfig = {
            mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
            title:'提示',
            width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
            height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
            cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
            modal:true,
            content: '' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
        };
        Util.ajax.postJson(AjaxPath.project+"/sprints/"+editSprintdata.id, JSON.stringify(editFormSprintData), function(result, isok) {
            handLoading.destroy();
            if(result.returnCode==="0000") {
                saveEditSprintDiaConfig.content = '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>'
                saveEditSprintDia = new Dialog(saveEditSprintDiaConfig);
                saveEditSprintDia.on('onclose',function(){
                    back();
                });
            } else {
                saveEditSprintDiaConfig.content = '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>'
                saveEditSprintDia = new Dialog(saveEditSprintDiaConfig);
            }
        },"application/json");
    };
    //toggle
    var bindTableSwitch = function(e){
        $(this).toggleClass('tri-left');
        $(this).parent('.t-list-title').siblings().stop().slideToggle();
    };
    //活动日志
    var LogTable = function(){
        editSprintLogTable = new List({
            el: $('.editSprintLogTable', $el),
            ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                method:'GET'
            },
            field: {
                boxType: 'radio',
                key: 'id',
                items: [
                    {
                        text: '操作人',
                        name: 'createrName',
                        className: 'w90',
                        // sorting:1,
                        width:100,
                        click: function (e, val,item) {
                            // console.log(e,item)
                            // creatDialog(e, item);
                        },
                        render: function (item, val) {
                            return val;
                        }
                    },
                    {
                        text: '记录',
                        name: 'content',
                        className: 'w90 text-break',
                        // sorting:1,
                        width:400,
                        render: function (item, val) {
                            // console.log(item);
                            var str = "";
                            str += '<p class="fn-left">于&nbsp;&nbsp;' + new Date(item.createTime).Format('yyyy-MM-dd hh:mm:ss') +(item.refContent==null?'':('&nbsp;&nbsp;将需求：<a>'+item.refContent)+'</a>,')+'&nbsp;&nbsp;'+item.typeName + '了 ' + item.businessType  + ': <a href="javascript:;" data="'+ item.businessId +'" class="viewSubTaskBtn">'+ item.businessTitle +'</a>' + item.content +'。</p>';
                            return str;
                        }
                    }]
            },
            page: {
                customPages: [2, 3, 5, 10, 15, 20, 30, 50], //可选择每页显示多少条
                perPage: 5, //默认每页显示多少条记录
                total: true
            },
            data: {
                url: AjaxPath.project + '/logInfo/query?businessId='+ editSprintdata.id +'&businessType=sprint'
            }
        });
        editSprintLogTable.search();
        editSprintLogTable.on('success',function(result){
            $(".editSprintLogTable" ,$el).find(".sn-list-header").hide();
        });
    };
    var bindEditSprintLogTab = function(){
        var data={};
        $(this).addClass('actived').siblings().removeClass('actived');
        data.type = $(this).attr("data");
        editSprintLogTable.search(data);
    };
    //添加备注
    var createSprintMomeDialog = function(){
        require(['text!tpl/requirement/addMemo.tpl'], function(addMomo){
            var data = {};
            data.formClassName = "detailEditSprintMemoForm";
            data.textareaName = "comment";
            var config = {
                mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                title: '添加备注', //对话框标题，
                content: Util.hdb.compile(addMomo)(data), //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                ok: function() {
                    if(editSubTaskMomeValidor.form()) {
                        createSprintMome();
                    } else {
                        console.log('验证失败');
                    }
                    return false;
                },
                cancel: function() {
                    return true;
                },
                cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                okValue: '确定', //取消按钮的文本 默认是 ‘关闭’
                cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                width: 600, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                height: 140, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                fixed: false, //是否开启固定定位 默认false不开启|true开启
                quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                beforeOpen: function() {
                }, //对话框打开之前执行。
                escClose:true,//esc键快速关闭对话框，默认为true
                zIndex:990   // 对话框的z-index值，默认是1024。
            };
            dialog = new Dialog(config);
            createReqMomeValidation();
        })
    };
    var createReqMomeValidation = function() {
        var config = {
            // el: $('.validatorForm'),
            el: $(".detailEditSprintMemoForm"),
            // submitBtn: $(".btnSave"), //触发验证的按钮，可不配置
            dialog: true, //是否弹出验证结果对话框
            rules: {
                comment: "required"
            },
            messages: {
                comment: {
                    required: "备注不能为空！"
                }
            }
        };
        editSubTaskMomeValidor = new Validator(config);
    }

    var createSprintMome = function(){
        var config = null;
        var data = Form.serialize($('.detailEditSprintMemoForm'));
        data.id = editSprintdata.id;
        data.sprintName = editSprintdata.sprintName;
        data.createPerson = $cookie.get('userId');
        Util.ajax.postJson(AjaxPath.project + '/sprints/addComment?', JSON.stringify(data), function(result, isok){
            if(result.returnCode==="0000"){
                dialog.remove();
                editSprintLogTable.search();
                $('.editReqTaskLogTab li').eq(0).addClass('actived').siblings().removeClass('actived');
            }else {
                config = {
                    mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                    title:'提示',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                    modal:true,
                    content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                };
                dialog = new Dialog(config);
            }
        }, 'application/json')
    };


    var createLoading = function(){
        loadingConfig = {
            el:'body',                  //组件要绑定的容器，默认为body（此项可不配置或留空）
            className:'loading',           //组件外围的className
            position:'center',      //提示信息位置，顶部top|默认center中央
            width:'300',      //loading的宽度,非必须，默认300
            height:'auto',      //loading的宽度,非必须，默认auto
            mask:1,                 //是否显示遮罩， 0不显示|默认1显示
            animate:1,              //是否显示动画效果， 0不显示|默认1显示
            mode:'layer',     //展示方式 loadingLine线条方式|默认layer弹层方式
            text:'加载中...',       //提示文字，默认 加载中...
            icon:'dotCycle',  //文字前面的gif动画， 默认dotCycle有点组成的圈|cmcc移动图标|cmccLarge大的移动图标
        }
    };
    return initialize;
});

